// cf-653c
// 题意：给定n(2<=n<=150000)个数的序列a，定一一个好序列为
//        所有奇数i都满足 a[i] < a[i + 1], i < n
//        所有偶数i都满足 a[i] > a[i + 1], i < n
//      现在可以交换两个数，给定一个初始为坏序列的序列，问有多少种
//      交换方法使得交换一次后得到好序列。
//
// 题解：这道题比赛的时候想到大概的做法，但是感觉有很多细节一直没想清楚，
//       就不想写....这种题得多练练，其实梳理一下也不难。
//       首先统计出坏位置i的个数，即对于位子i不满足条件。
//       如果个数大于4输出0。不然我们将所有坏位子i以及i+1, 去重后加入一个
//       向量，然后扫描这个向量的元素，对于每个元素O(n)的选择交换位置，
//       然后检查所有坏位子以及交换的位子满不满足题目条件，如果满足答案
//       加1。因为坏位子个数是O(1)的，所以总的复杂度是O(n)的。
//
//
// run: $exec < input
#include <iostream>
#include <algorithm>
#include <vector>

int const maxn = 150007;
int a[maxn];
bool is_bad[maxn];
int n;
std::vector<int> bad;

bool check_nice(int u)
{
	if (u & 1) {
		if (u < n && a[u] >= a[u + 1]) return false;
		if (u > 1 && a[u] >= a[u - 1]) return false;
	} else {
		if (u < n && a[u] <= a[u + 1]) return false;
		if (u > 1 && a[u] <= a[u - 1]) return false;
	}
	return true;
}

bool check(int x)
{
	if (!check_nice(x)) return false;
	for (int i = 0; i < (int)bad.size(); i++) {
		int u = bad[i];
		if (!check_nice(u)) return false;
	}
	return true;
}

int main()
{
	std::ios::sync_with_stdio(false);
	std::cin >> n;
	for (int i = 1; i <= n; i++) std::cin >> a[i];

	int count = 0;
	for (int i = 1; i <= n - 1; i++)
		if (i & 1) {
			if (a[i] >= a[i + 1]) {
				count++;
				bad.push_back(i);
				bad.push_back(i + 1);
				is_bad[i] = is_bad[i + 1] = true;
			}
		} else {
			if (a[i] <= a[i + 1]) {
				count++;
				bad.push_back(i);
				bad.push_back(i + 1);
				is_bad[i] = is_bad[i + 1] = true;
			}
		}
	if (count > 4) {
		std::cout << "0\n";
		return 0;
	}
	std::sort(bad.begin(), bad.end());
	auto last = std::unique(bad.begin(), bad.end());
	bad.erase(last, bad.end());

	int ans = 0;
	for (int i = 0; i < (int)bad.size(); i++) {
		int u = bad[i];
		for (int j = 1; j <= n; j++) {
			if (j < u && is_bad[j]) continue;
			std::swap(a[u], a[j]);
			if (check(j)) ans++;
			std::swap(a[u], a[j]);
		}
	}
	std::cout << ans << '\n';
}

